#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QDialog>
#include <QtDebug>
#include <QHBoxLayout>      //水平布局


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QPushButton* button_1 = new QPushButton("开启模态对话框",this);
    QPushButton* button_2 = new QPushButton("开启非模态对话框",this);
    QHBoxLayout* buttonlayout = new QHBoxLayout(this);
    buttonlayout->addWidget(button_1);
     buttonlayout->addWidget(button_2);


    connect(button_1,SIGNAL(clicked(bool)),this,SLOT(onBtnclickedSlot()));
    connect(button_2,SIGNAL(clicked(bool)),this,SLOT(onBtn2clickedSlot()));
    resize(600,400);


}

Widget::~Widget()
{
    delete ui;
}

//模态对话框槽函数：
void Widget::onBtnclickedSlot()
{
    //继承关系：
    //QWidget =>(派生)  QDialog

    //QDialog dlg(this);
    //dlg.show();
            //这是局部变量，局部变量的生明周期在函数内部执行完毕就结束了，所以就会看到对话框一闪而过

    //解决：   对话框分为两种，一种是模态对话框，另一种是非模态对话框；
                        //模态对话框：弹出后只能先操作该对话框窗口，不能操作其他对话框；非模态对话框就没有这个问题；
    //所以模态对话框能防止一闪而过

    //模态对话框：
    QDialog dlg(this);

    QPushButton* AcceptedBtn = new QPushButton("Accepted关闭",&dlg);
    QPushButton* RejectedBtn = new QPushButton("Rejected关闭",&dlg);

    QHBoxLayout* mainLayout = new QHBoxLayout(&dlg);
    mainLayout->addWidget(AcceptedBtn);
    mainLayout->addWidget(RejectedBtn);

    dlg.resize(500,200);


    //信号槽：
    connect(AcceptedBtn,SIGNAL(clicked(bool)),&dlg,SLOT(accept()));
    connect(RejectedBtn,SIGNAL(clicked(bool)),&dlg,SLOT(reject()));


   // int result = dlg.exec();
    //qDebug()<<result;       //关闭对话框，打印的是0，其实是QDialog::Rejected宏定义；所以可以这样判断

    if(QDialog::Rejected == dlg.exec())
    {
        qDebug()<<"Rejected关闭对话框";
    }
    else
    {
        qDebug()<<"Accepted关闭对话框";
    }


}

//非模态对话框槽函数：
void Widget::onBtn2clickedSlot()
{
    //为了防止一闪而过，要和模态对话框的操作有出入：
    QDialog* dlg = new QDialog(this);
    dlg->resize(500,200);

    dlg->show();


}


